﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Permissions;
using System.Collections;
using System.Linq;

using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using uacars;

namespace CADLibraryClass
{
    public class ClientesCAD
    {
        private string cadenaConexion;

        public ClientesCAD()
        {
            cadenaConexion = Singleton.Instancia.Cadena;
        }


        //IMPLEMENTACION DE LAS FUNCIONES DE ACCESO A DATOS
        public bool AltaCliente(int id, string dni, string nombre, string apellido1, string apellido2, string telefono, string email, string direccion, string poblacion, string provincia, string codigoPostal, DateTime fechAlta, string login, string password)
        {
            bool estadoOperacion = false;

            try
            {
                DataSet bdvirtual = new DataSet();

                SqlDataAdapter da = new SqlDataAdapter("select * from clientes", cadenaConexion);
                da.Fill(bdvirtual, "clientes");

                DataTable dt = new DataTable();
                dt = bdvirtual.Tables["clientes"];

                DataRow nuevaFila = dt.NewRow();
                nuevaFila[0] = id;
                nuevaFila[1] = dni;
                nuevaFila[2] = nombre;
                nuevaFila[3] = apellido1;
                nuevaFila[4] = apellido2;
                nuevaFila[5] = telefono;
                nuevaFila[6] = email;
                nuevaFila[7] = direccion;
                nuevaFila[8] = poblacion;
                nuevaFila[9] = provincia;
                nuevaFila[10] = codigoPostal;
                nuevaFila[11] = fechAlta;
                nuevaFila[12] = login;
                nuevaFila[13] = password;

                dt.Rows.Add(nuevaFila);

                SqlCommandBuilder cBuilder = new SqlCommandBuilder(da);

                da.Update(bdvirtual, "clientes");

                dt.AcceptChanges();
            }


            catch (SqlException sqlex)
            {
                throw new Exception("Error insertando cliente en uacarsBD: " + id, sqlex);
            }

            catch (Exception ex)
            {
                throw ex;
            }
            estadoOperacion = true;

            return (estadoOperacion);
        }

        public DataTable BuscarClientes()
        {
            DataSet bdvirtual = new DataSet();

            SqlDataAdapter da = new SqlDataAdapter("select * from clientes", cadenaConexion);

            da.Fill(bdvirtual, "clientes");

            DataTable dt = new DataTable();
            dt = bdvirtual.Tables["clientes"];

            return (dt);

        }

        public DataTable BuscarClientes2()
        {
            DataSet bdvirtual = new DataSet();

            //SqlDataAdapter da = new SqlDataAdapter("select * from clientes", cadenaConexion);
            SqlDataAdapter da = new SqlDataAdapter("select id,nif,nombre,apellido1,apellido2,telefono, email, direccion, localidad, provincia, cp, fechaalta from clientes", cadenaConexion);

            da.Fill(bdvirtual, "clientes");

            DataTable dt = new DataTable();
            dt = bdvirtual.Tables["clientes"];

            return (dt);

        }

        public DataTable BuscarClientes(int id, string dni, string nombre, string apellido1, string apellido2, string telefono, string email, string direccion, string poblacion, string provincia, string codigoPostal, DateTime fechAlta, string login, string password)
        {
            string filtro = "";

            if (dni != "") filtro += "nif = " + dni;
            if (nombre != "") { if (filtro != "") filtro += " AND "; filtro += "nombre LIKE '" + nombre + "'"; }
            if (apellido1 != "") { if (filtro != "") filtro += " AND "; filtro += "apellido1 LIKE '" + apellido1 + "'"; }
            if (apellido2 != "") { if (filtro != "") filtro += " AND "; filtro += "apellido2 LIKE '" + apellido2 + "'"; }
            if (telefono != "") { if (filtro != "") filtro += " AND "; filtro += "telefono = " + telefono; }
            if (email != "") { if (filtro != "") filtro += " AND "; filtro += "email LIKE '" + email + "'"; }
            if (direccion != "") { if (filtro != "") filtro += " AND "; filtro += "direccion LIKE '" + direccion + "'"; }
            if (poblacion != "") { if (filtro != "") filtro += " AND "; filtro += "localidad LIKE '" + poblacion + "'"; }
            if (provincia != "") { if (filtro != "") filtro += " AND "; filtro += "provincia LIKE '" + provincia + "'"; }
            if (codigoPostal != "") { if (filtro != "") filtro += " AND "; filtro += "cp = " + codigoPostal; }
            if (fechAlta != DateTime.Parse("01/01/1900")) { if (filtro != "") filtro += " AND "; filtro += "fechaalta = '" + fechAlta.Date+"'"; }
            if (login != "") { if (filtro != "") filtro += " AND "; filtro += "login LIKE '" + login + "'"; }
            if (password != "") { if (filtro != "") filtro += " AND "; filtro += "password LIKE '" + password + "'"; }

            string nombreTabla = "clientes";
            DataSet ds = new DataSet();
            ds.Tables.Add(nombreTabla);
            SqlConnection conn = new SqlConnection(cadenaConexion);
            SqlDataAdapter da = new SqlDataAdapter();
            SqlCommand co = new SqlCommand("", conn);
            if (filtro == "")
                co.CommandText = "select * from " + nombreTabla;
            else
                co.CommandText = "select * from " + nombreTabla + " WHERE " + filtro;
            da.SelectCommand = co;
            da.Fill(ds, nombreTabla);

            return ds.Tables[nombreTabla];
        }


        public bool ModificarCliente(int id, string dni, string nombre, string apellido1, string apellido2, string telefono, string email, string direccion, string poblacion, string provincia, string codigoPostal, DateTime fechAlta, string login, string password)
        {
            bool estadoOperacion;
            try
            {
                DataSet bdvirtual = new DataSet();

                SqlDataAdapter da = new SqlDataAdapter("select * from clientes", cadenaConexion);
                da.Fill(bdvirtual, "clientes");

                DataTable dt = new DataTable();
                dt = bdvirtual.Tables["clientes"];


                DataRow fila = dt.Select("id='" + id + "'")[0];
                fila["id"] = id;
                fila["nif"] = dni;
                fila["nombre"] = nombre;
                fila["apellido1"] = apellido1;
                fila["apellido2"] = apellido2;
                fila["telefono"] = telefono;
                fila["email"] = email;
                fila["direccion"] = direccion;
                fila["localidad"] = poblacion;
                fila["provincia"] = provincia;
                fila["cp"] = codigoPostal;
                fila["fechaalta"] = fechAlta;
                fila["login"] = login;
                fila["password"] = password;


                bdvirtual.Tables["clientes"].LoadDataRow(fila.ItemArray, true);
                SqlCommandBuilder cBuilder = new SqlCommandBuilder(da);

                da.Update(bdvirtual, "clientes");

                dt.AcceptChanges();
            }


            catch (SqlException sqlex)
            {
                throw new Exception("Error modificando cliente en uacarsBD: " + id, sqlex);
            }

            catch (Exception ex)
            {
                throw ex;
            }
            estadoOperacion = true;

            return (estadoOperacion);
        }

        public bool BorrarCliente(int id)
        {
            try
            {
                DataSet bdvirtual = new DataSet();

                SqlDataAdapter da = new SqlDataAdapter("select * from clientes", cadenaConexion);
                da.Fill(bdvirtual, "clientes");

                DataTable dt = new DataTable();
                dt = bdvirtual.Tables["clientes"];

                DataRow[] filaBorrar;
                filaBorrar = dt.Select("id = " + id);
                filaBorrar[0].Delete();

                SqlCommandBuilder cBuilder = new SqlCommandBuilder(da);

                da.Update(bdvirtual, "clientes");

                dt.AcceptChanges();

            }

            catch (SqlException sqlex)
            {
                throw new Exception("Error borrando cliente en uacarsBD: " + id, sqlex);
            }

            catch (Exception ex)
            {
                throw ex;
            }
            return true;
        }
    }
}
